/*
	模拟倒数计时，火箭发射
	如何中途停止发射？需要键盘控制，可以启动一个Goroutine去监控键盘输入，有键盘输入，停止发射！
*/
package main

import (
	"fmt"
	"os"
	"time"
)

func lanuch() {
	fmt.Println("火箭发射!!!")
}

//硬性要求： readmsg内部不能直接退出进程，必须由main来控制
//main要读取2个channel的数据，将会有问题！！！ select监控多个channel
func readmsg(ch chan<- int) {
	//读取标准输入
	buf := make([]byte, 10)
	os.Stdin.Read(buf) //阻塞读取
	//如果有，发送channel
	ch <- 0
}

func main() {
	tk := time.NewTicker(time.Second * 1)
	num := 5
	flag := true
	ch := make(chan int)
	go readmsg(ch)

	for {
		select {
		//select监控多个channel
		case <-tk.C:
			fmt.Println(num)
			num--
		case <-ch:
			flag = false
		}
		if num == 0 || !flag {
			break
		}
	}
	if flag {
		lanuch()
	} else {
		fmt.Println("取消发射！！！")
	}

}
